import java.util.HashMap;
import java.util.Map;

public class 罗马数字转整数 {
    public int romanToInt(String ss) {
        //哈希表处理映射问题, 其中数组[0]是value,[1]是顺序大小
        Map<Character,int[]> map = new HashMap<>();
        map.put('I',new int[]{1,1});
        map.put('V',new int[]{5,2});
        map.put('X',new int[]{10,3});
        map.put('L',new int[]{50,4});
        map.put('C',new int[]{100,5});
        map.put('D',new int[]{500,6});
        map.put('M',new int[]{1000,7});
        //装换成字符数组
        char[] s = ss.toCharArray();
        int n = s.length;
        int sum = 0;

        //从后往前进行遍历
        int i = n - 1;
        while(i >= 0){
            //遍历到的值
            int[] value = map.get(s[i]);
            //边界处理
            if(i == 0){
                sum += value[0];
                i--;
                continue;
            }
            //前一个值
            int[] value1 = map.get(s[i - 1]);
            //如果大要减, 不变或小直接加
            if(value[1] > value1[1]){
                sum += value[0] - value1[0];
                i -= 2;
            }else{
                sum += value[0];
                i--;
            }
        }
        //返回和
        return sum;
    }
}
